#include <54func.h>
int main(int argc,char *argv[])
{
    // ./0_aqiang 1.pipe 2.pipe
    ARGS_CHECK(argc,3);
    int fdr = open(argv[1],O_RDONLY);
    ERROR_CHECK(fdr,-1,"open read");
    int fdw = open(argv[2],O_WRONLY);
    ERROR_CHECK(fdw,-1,"open write");
    printf("aqiang is Connected!\n");

    char buf[4096];//读写缓冲区
    fd_set rdset;//文件描述符集合
    while(1){
        FD_ZERO(&rdset);
        //把可能引起阻塞的行为放入到监听集合
        FD_SET(fdr,&rdset);
        FD_SET(STDIN_FILENO,&rdset);
        select(fdr+1,&rdset,NULL,NULL,NULL);
        time_t now = time(NULL);//记录时间
        //只要有返回值，就说明有就绪集合中有进程就绪
        if(FD_ISSET(fdr,&rdset))//从管道中读取数据就绪，说明aqiang要从管道中接收azhen发送的数据！！！
        {
            memset(buf,0,sizeof(buf));
            ssize_t sret = read(fdr,buf,sizeof(buf));//把管道中的数据读取到buf缓存中，不是strlen(buf)
            if(sret == 0)//若是azhen进程杀死，那么azhen管道的写端小时，aqiang的读端会一直读0
            {
                printf("see you azhen!\n");
                break;
            }
            printf("azhen：%s\n",buf);
        }
        if(FD_ISSET(STDIN_FILENO,&rdset))//如果标准输入就绪，那么说明aqiang是要从标准输入中写入数据到管道中
        {
            memset(buf,0,sizeof(buf));
            ssize_t sret = read(STDIN_FILENO,buf,sizeof(buf));//先从stdin标准输入中读取数据
            if(sret == 0){
                printf("see you!\n");
                break;
            }
            time_t now = time(NULL);//获取时间
            char *p = ctime(&now);
            char newbuf[8192] = {0};
            sprintf(newbuf,"%s %s",p,buf);//将发送的详细与时间一起发送到管道
            write(fdw,newbuf,strlen(newbuf));//把读取的数据写入数据到管道中,有多少写多少！！！
        }
    }


    close(fdr);
    close(fdw);
    return 0;
}
